# # coding: utf-8
# import numpy as np
# import matplotlib.pyplot as plt
# from scipy import stats
#
# # 生成一个从0到1（不包括1），步长为0.001的等差数列，作为x轴的值
# x = np.arange(0,1,0.001)
# # 计算Beta分布（参数为4和2）在x上的概率密度函数值
# y = stats.beta.pdf(x,4,2)
# # 计算x和y的均值
# mean_x=np.mean(x)
# mean_y=np.mean(y)
# # 对x和y进行均值移除（去中心化），即每个元素减去其均值
# x1=x-mean_x
# y1=y-mean_y
#
# # 创建一个图形对象
# fig = plt.figure()
#
# # 第一个子图（2行2列，第1个位置）
# plt.subplot(221)
# plt.plot(x, y, "k-", linewidth=2)  # 绘制原始的Beta分布PDF
# plt.scatter(mean_x, mean_y, c='k', marker='o')  # 标记均值点
# plt.grid(True)  # 显示网格
# plt.xlim(0, 1)  # 设置x轴范围
# plt.ylim(0, 2.12)  # 设置y轴范围
#
# # 第二个子图（2行2列，第2个位置）
# plt.subplot(222)
# plt.plot(x1, y1, "k-", linewidth=1)  # 绘制均值移除后的Beta分布PDF
# plt.scatter(np.mean(x1), np.mean(y1), c='k', marker="x")  # 标记均值移除后的均值点（理论上应为原点）
# plt.grid(True)
# # 注释掉的代码行原本用于打印y1的最小值和最大值，但这里未使用
# # print np.min(y1),np.max(y1)
# plt.xlim(-0.5, 0.5)  # 设置x轴范围以显示均值移除效果
# plt.ylim(-1, 1.12)  # 设置y轴范围
#
# # 第三个子图（2行1列，第2个位置，注意这里实际上是覆盖了第二个子图的布局）
# plt.subplot(212)
# # 在同一个子图中绘制原始和均值移除后的Beta分布PDF，以及它们的均值点
# plt.plot(x, y, "k-", linewidth=2)
# plt.scatter(mean_x, mean_y, c='k', marker="o")
# plt.plot(x1, y1, "k-", linewidth=1)
# plt.scatter(np.mean(x1), np.mean(y1), c='k', marker="x")
# plt.grid(True)
#
# # 显示图形
# plt.show()
#
# # 注释掉的代码行原本用于保存图形到文件，但这里未执行
# # fig.savefig('./img/MeanRemoval.png',dpi=600)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta
from sklearn.datasets import load_iris

# 加载 Iris 数据集
iris = load_iris()
X = iris.data[:, 0]  # 使用所有行的第一列数据（花萼长度）

# 对数据进行归一化处理，使其位于0到1之间
x = (X - np.min(X)) / (np.max(X) - np.min(X))

# 计算Beta分布（参数为4和2）在x上的概率密度函数值
y = beta.pdf(x, 4, 2)

# 计算x和y的均值
mean_x = np.mean(x)
mean_y = np.mean(y)

# 对x和y进行均值移除（去中心化），即每个元素减去其均值
x1 = x - mean_x
y1 = y - mean_y

# 创建一个图形对象
fig = plt.figure()

# 第一个子图（2行2列，第1个位置）
plt.subplot(221)
plt.plot(x, y, "k-", linewidth=2)  # 绘制原始的Beta分布PDF
plt.scatter(mean_x, mean_y, c='k', marker='o')  # 标记均值点
plt.grid(True)  # 显示网格
plt.xlim(0, 1)  # 设置x轴范围
plt.ylim(0, 2.12)  # 设置y轴范围

# 第二个子图（2行2列，第2个位置）
plt.subplot(222)
plt.plot(x1, y1, "k-", linewidth=1)  # 绘制均值移除后的Beta分布PDF
plt.scatter(np.mean(x1), np.mean(y1), c='k', marker="x")  # 标记均值移除后的均值点（理论上应为原点）
plt.grid(True)
plt.xlim(-0.5, 0.5)  # 设置x轴范围以显示均值移除效果
plt.ylim(-1, 1.12)  # 设置y轴范围

# 第三个子图（2行1列，第2个位置，注意这里实际上是覆盖了第二个子图的布局）
plt.subplot(212)
# 在同一个子图中绘制原始和均值移除后的Beta分布PDF，以及它们的均值点
plt.plot(x, y, "k-", linewidth=2)
plt.scatter(mean_x, mean_y, c='k', marker="o")
plt.plot(x1, y1, "k-", linewidth=1)
plt.scatter(np.mean(x1), np.mean(y1), c='k', marker="x")
plt.grid(True)

# 显示图形
plt.show()